from decimal import Decimal

# 使用包含方式构建基础的 Money类
class Money():

    default_curr = 'USD'

    def __init__(self,v = '0',units = ''):
        self.dec_amt = Decimal(v)
        if not units:
            self.units = Money.default_curr
        else:
            self.units = units

    def __str__(self):
        s = str(self.dec_amt) + ' ' + self.units
        return s

    def __repr__(self):
        s = ('Money('+ str(self.dec_amt) + ' ' + self.units + ')')
        return s

    exch_dict = {
        'USDCAD':Decimal('0.75'),'USDEUR':Decimal('1.16'),
        'CADUSD': Decimal('1.33'), 'CADEUR': Decimal('1.54'),
        'EURUSD': Decimal('0.86'), 'EURCAD': Decimal('0.65'),
    }

    def __add__(self, other):
        '''
        Money __add__ 函数。
        将两个Money对象相加，如果第二个对象与第一个对象具有不同的货币
        单位units，则应先应用汇率做转换，然后再将两个金额相加。结果保留
        两位小数

        '''
        if self.units != other.units:
            r = Money.exch_dict[self.units+other.units]
            m1 = self.dec_amt
            m2 = other.dec_amt * r
            m = Money(m1 + m2,self.units)
        else:
            m = Money(self.dec_amt + other.dec_amt,self.units)
        m.dec_amt = round(m.dec_amt,2)
        return m


# m1 = Money('0.10')
# print(m1.dec_amt,m1.units)

m2 = Money('0.10')
print(m2)

print(repr(m2))

us_m = Money('1','USD')
ca_m = Money('1','CAD')
print(us_m + ca_m)

